import type {
  EntityApi,
  EntityPage,
  EntityReq,
  EntityModel,
  EntityKey,
  EntityKeyList,
  EntityCreateReq,
  EntityUpdateReq,
} from "jmash-core";
export interface JobApi extends EntityApi {}

// 模块岗位查询参数
export interface JobReq extends EntityReq {
  // 租户ID
  tenant?: string;
  // 是否包含
  hasRoleType?: boolean;
  // 角色/职务类型
  roleType?: string;
  // 模糊匹配岗位编码（可选）
  roleCode?: string;
  // 模糊查询岗位名称（可选）
  likeRoleName?: string;
}

// 岗位分页数据
export interface JobPage extends EntityPage {
  results: JobModel[];
}

// 岗位ID列表
export interface JobKeyList extends EntityKeyList {
  // 租户
  tenant?: string;
  // 角色ID/职务ID
  roleId?: string[];
}
// 编辑岗位数据
export interface JobUpdateReq extends EntityUpdateReq {
  // 租户ID（可选）
  tenant?: string;
  // 请求ID（用于防止重复提交，可选）
  requestId?: string;
  // 角色/职务类型（可选，编辑时保留原值）
  roleType?: string;
  // 更新字段掩码（用于指定更新哪些字段，可选）
  updateMask: string;
  // 岗位ID（编辑时需提供）
  roleId?: string;
  // 岗位编码
  roleCode?: string;
  // 岗位名称
  roleName?: string;
  // 岗位描述
  description?: string;
  // 操作权限列表（可选）
  permCodes?: any[];
  // 所属模块ID（可选）
  moduleId?: string;
}

// 新增岗位数据
export interface JobCreateReq extends EntityCreateReq {
  // 租户ID（可选）
  tenant?: string;
  // 请求ID（用于防止重复提交，可选）
  requestId?: string;
  // 角色/职务类型（可选，编辑时保留原值）
  roleType?: string;
  // 岗位编码
  roleCode?: string;
  // 岗位名称
  roleName?: string;
  // 岗位描述
  description?: string;
  // 操作权限列表（可选）
  permCodes?: any[];
  // 所属模块ID（可选）
  moduleId?: string;
}

export type JobFormReq = JobCreateReq | JobUpdateReq;

// 角色/职务表主键
export interface JobKey extends EntityKey {
  // 租户
  tenant?: string;
  // 角色ID/职务ID
  roleId?: string;
}

// 角色/职务表实体
export interface JobModel extends EntityModel {
  // 角色ID/职务ID
  roleId?: string;
  // 角色编码/职务编码
  roleCode?: string;
  // 角色名称/职务名称
  roleName?: string;
  // 角色/职务
  roleType?: string;
  // 父角色
  parentId?: string;
  // 深度
  depth?: number;
  // 排序
  orderBy?: number;
  // 描述
  description?: string;
  // 创建人
  createBy?: string;
  // 创建时间
  createTime?: string;
}

export interface JobMoveKey {
  // 租户
  tenant?: string;
  roleId?: string;
  up?: boolean;
}
